"""
刷新数据
    Session 被设计为数据操作的执行者, 会先将操作产生的数据保存到内存中
    在执行 flush刷新操作 后, 数据操作才会同步到数据库中
    有两种情况下会 隐式执行刷新操作:
        提交会话
        执行查询操作 (包括 update 和 delete 子查询)
    开发者也可以 手动执行刷新操作 session.flush()
"""
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 相关配置
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql@127.0.0.1:3306/Test'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_ECHO'] = True

# 创建组件对象
db = SQLAlchemy(app)


# 构建模型类  商品表
class Goods(db.Model):
    __tablename__ = 't_good'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20), unique=True)
    count = db.Column(db.Integer)


@app.route('/')
def purchase():

    # 新增数据
    goods = Goods(name='方便面', count=20)
    db.session.add(goods)

    # 主动执行flush操作, 立即执行SQL操作(数据库同步)
    db.session.flush()

    # 查询操作会自动执行flush操作
    # Goods.query.count()

    # 提交会话会自动执行flush操作
    db.session.commit()

    return "(刷新数据)更新数据库"


if __name__ == '__main__':
    # 删除所有继承自db.Model的表
    db.drop_all()
    # 创建所有继承自db.Model的表
    db.create_all()

    app.run(debug=True)
